<?php
App::uses('AppController', 'Controller');
/**
 * Authorlinks Controller
 *
 * @property Authorlink $Authorlink
 * @property PaginatorComponent $Paginator
 */
class AuthorlinksController extends AppController {
	
	// элементы меню правой колонки шаблона defaultwsb
	public $SideBarItems = array();
	// сообщения выводимые в правой колонке под меню при использовании шаблона defaultwsb
	public $SideBarMessage = '';
	public $HMenu = '';
	public $VMenu = '';
		
	// id пользователя  он же id teacher  он же id author
	public $SessionUserData = '';
	
	public function beforeFilter() {
		AppController::beforeFilter();
	
		$this->set('SideBarMessage', $this->SideBarMessage);
		$this->set('HMenu', $this->HMenu);
	
		$this->SessionUserData = $this->Session->read('SessionUserData');
	
	}	

/**
 * Components
 *
 * @var array
 */
	public $components = array('RequestHandler');
/**
 * index method
 *
 * @return void
 */
	public function index() {

		// устанавливаем активный пункт меню в верхем меню
		$this->set('HMenu', 'Record');
		
	}

	/**
	 *  функция возвращает список преподавателей для autocomplete
	 */
	public function autocomplete(){
	    Configure::write('debug', 0);
	    $this->autoRender=false;
	    $this->layout = 'ajax';
	    $this->loadModel('Teacher');
	    
	    $teachers = $this->Teacher->find('all', array(
	        'conditions' => array('Teacher.lastname LIKE' => $this->request->query['term'] . '%'),
	        'fields' => array('Teacher.lastname', 'Teacher.firstname', 'Teacher.surname', 'Teacher.id')));
	    $response = array();
	    $i = 0;
	    foreach($teachers as $teacher){
	    	
	    	$response[$i]['id'] = $teacher['Teacher']['id'];
	    	$response[$i]['label'] = $teacher['Teacher']['lastname'].' '.$teacher['Teacher']['firstname'].' '.$teacher['Teacher']['surname'];
	   		$response[$i]['value'] = $teacher['Teacher']['lastname'].' '.$teacher['Teacher']['firstname'].' '.$teacher['Teacher']['surname'];
	   		
	   		$i++;
	    }
	    echo json_encode($response);
	}
/**
 * view method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		if (!$this->Authorlink->exists($id)) {
			throw new NotFoundException(__('Invalid authorlink'));
		}
		$options = array('conditions' => array('Authorlink.' . $this->Authorlink->primaryKey => $id));
		$this->set('authorlink', $this->Authorlink->find('first', $options));
	}

/**
 * add method
 *
 * @return void
 */
	public function add() {
		// устанавливаем активный пункт меню в верхем меню
		$this->set('HMenu', 'Record');
		
		if ($this->request->is('post') && !isset($this->data['Authorlink']['doadd'])) {

			$authortype_id = $this->data['Authorlink']['authortype_id'];
			switch ($authortype_id) {
				/** ************************************************************************************
				 * // если преподаватель
				 * ************************************************************************************/				
				case 1: 
					// debug($this->data);
					// проверяем выбран ли преподаватель
					if ($this->data['Authorlink']['author_id'] ==''){
						$this->Session->setFlash(__('Вы не выбрали преподавателя! Попробуйте еще раз!'));
						return $this->redirect(array('action' => 'index'));
					}
					// предотвращаем самодобавление автора
					if ($this->data['Authorlink']['author_id'] == $this->SessionUserData) {
						$this->Session->setFlash(__('Вы выбрали самого себя в качестве соавтора! Вы уже автор!'));
						return $this->redirect(array('action' => 'index'));						
					}

					// формируем новую запись Authorlink
					$newauthorlink = array('Authorlink' => array('recordtype_id' => $this->data['Authorlink']['recordtype_id'],
							'recordid' => $this->data['Authorlink']['recordid'],
							'author_id' => $this->data['Authorlink']['author_id'],
							'is_owner' => 0,
							'active' => 0
					));
										
				break;
				/** ************************************************************************************
				 * // если студент
				 * ************************************************************************************/				
				case 2: 
					// debug ($this->data);
					// проверяем выбрана ли специальность
					if ($this->data['Authorlink']['profession_id'] ==''){
						$this->Session->setFlash(__('Вы не выбрали специальность! Попробуйте еще раз!'));
						return $this->redirect(array('action' => 'index'));
					}		
					// проверяем выбран ли курс
					if ($this->data['Authorlink']['course_id'] ==''){
						$this->Session->setFlash(__('Вы не выбрали курс! Попробуйте еще раз!'));
						return $this->redirect(array('action' => 'index'));
					}	
					// проверяем выбрана ли группа
					if ($this->data['Authorlink']['studentgroup_id'] ==''){
						$this->Session->setFlash(__('Вы не выбрали группу! Попробуйте еще раз!'));
						return $this->redirect(array('action' => 'index'));
					}	
					// проверяем выбран ли студент
					if ($this->data['Authorlink']['student_id'] ==''){
						$this->Session->setFlash(__('Вы не выбрали студента! Попробуйте еще раз!'));
						return $this->redirect(array('action' => 'index'));
					}											
					$student_id = $this->data['Authorlink']['student_id'];
					// проверяем добавлялся ли этот студент в авторы
					$this->loadModel('Author');
					$student = $this->Author->find('first', array('conditions' => array('Author.authortype_id' => 2, 'Author.authorid' => $student_id),'recursive' => -1));	
					
					// формируем $author_id если студент уже добавлялся в авторы то берем текущий $author_id иначе формируем новый $author_id
					$count = count($student);
					$author_id = '';
					if ($count == 1) {
						$author_id = $student['Author']['id'];
					} else {
						// добавляем нового автора используя id студента
						// смещение id для студентов 10000
						$this->loadModel('Author');
						$newauthor = array('Author' => array(
								'id' => 10000 + $student_id,
								'authortype_id' => 2,
								'authorid' => $student_id
						));
						$this->Author->create();
						$this->Author->save($newauthor);
						$author_id = $this->Author->id;						
					}

					// формируем новую запись Authorlink
					$newauthorlink = array('Authorlink' => array('recordtype_id' => $this->data['Authorlink']['recordtype_id'],
							'recordid' => $this->data['Authorlink']['recordid'],
							'author_id' => $author_id,
							'is_owner' => 0,
							'active' => 0
					));
					
				break;
				/** ************************************************************************************
				 * // если внешний автор
				 * ************************************************************************************/
				case 3: 
					// проверяем выбран ли тип внешнего автора
					if ($this->data['Authorlink']['extauthortype_id'] ==''){
						$this->Session->setFlash(__('Вы не выбрали тип внешнего соавтора! Попробуйте еще раз!'));
						return $this->redirect(array('action' => 'index'));
					}	
					// проверяем введена ли фамилия внешнего автора		
					if ($this->data['Authorlink']['lastname'] ==''){
						$this->Session->setFlash(__('Вы ввели фамилию внешнего соавтора! Попробуйте еще раз!'));
						return $this->redirect(array('action' => 'index'));
					}							
					// добавляем нового внешнего автора
					$this->loadModel('Extauthor');
					$newextauthor = array('Extauthor' => array('extauthortype_id' => $this->data['Authorlink']['extauthortype_id'],
																'lastname' => $this->data['Authorlink']['lastname'],
																'firstname' => $this->data['Authorlink']['firstname'],
																'surname' => $this->data['Authorlink']['surname'],
																'mail' =>  $this->data['Authorlink']['mail'],
																));
					$this->Extauthor->create();
					$this->Extauthor->save($newextauthor);
					// получаем id внешнего автора
					$extauthor_id = $this->Extauthor->id;
					// добавляем нового автора используя id внешнего автора
					$this->loadModel('Author');
					// смещение для внешних авторов 100000
					$count = $this->Author->find('count', array('conditions' => array('Author.id >' => 100000)));
					$count += 1; 
					$newauthor = array('Author' => array(
														'id' => 100000 + $count, 
														'authortype_id' => 3,
														'authorid' => $extauthor_id
														));
					$this->Author->create();
					$this->Author->save($newauthor);
					$author_id = $this->Author->id;		

					// формируем новую запись Authorlink
					$newauthorlink = array('Authorlink' => array('recordtype_id' => $this->data['Authorlink']['recordtype_id'],
							'recordid' => $this->data['Authorlink']['recordid'],
							'author_id' => $author_id,
							'is_owner' => 0,
							'active' => 0
					));
										
				break;
			}
			$this->Authorlink->create();
			if ($this->Authorlink->save($newauthorlink)) {
				$this->Session->setFlash(__('The authorlink has been saved.'));
				return $this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('The authorlink could not be saved. Please, try again.'));
			}
		}
		
		
		//***************************************************
		// работа метода при первоначальном добавлении автора
		//***************************************************
		
		//debug($this->data);
		
		// проверяем выбрали тип автора или нет если нет то редирект на index
		if ($this->data['Authorlink']['authortype_id'] ==''){
			$this->Session->setFlash(__('Вы не выбрали тип соавтора! Попробуйте еще раз!'));
			return $this->redirect(array('action' => 'index'));
		}
		// отправляем $authortype_id во view для  формирования правильной записи в Author если потребуется
		$authortype_id = $this->data['Authorlink']['authortype_id'];
		$this->set('authortype_id', $authortype_id);
		
		// отправляем $recordtype_id во view для  формирования правильной записи в Authorlink
		$recordtype_id = $this->data['Authorlink']['recordtype_id'];
		$this->set('recordtype_id', $recordtype_id);
		
		// отправляем $record_id во view для  формирования правильной записи в Authorlink
		$record_id =   $this->data['Authorlink']['recordid'];
		$this->set('record_id', $record_id);
		
		switch ($authortype_id) {
			// преподаватель КГМУ
			case 1: 
				$this->loadModel('Teacher');
				$teachers = $this->Teacher->find('all', array('recursive' => -1, 'order' => array('Teacher.lastname desc')));
				$this->set('teachers', $teachers);
				//debug ($teachers);
				//die();				
				$this->render('add_teacher');
			break;
			// студент КГМУ
			case 2:
				$this->loadModel('Profession');
				$professions = $this->Profession->find('list');
				$this->set(compact('professions'));
				$this->render('add_student');
				break;
			// внешний автор
			case 3: 
				$this->loadModel('Extauthortype');
				$extauthortypes = $this->Extauthortype->find('list');
				$this->set(compact('extauthortypes'));
				$this->render('add_extauthor');
			break;
		}
	}

/**
 * edit method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		if (!$this->Authorlink->exists($id)) {
			throw new NotFoundException(__('Invalid authorlink'));
		}
		if ($this->request->is(array('post', 'put'))) {
			if ($this->Authorlink->save($this->request->data)) {
				$this->Session->setFlash(__('The authorlink has been saved.'));
				return $this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('The authorlink could not be saved. Please, try again.'));
			}
		} else {
			$options = array('conditions' => array('Authorlink.' . $this->Authorlink->primaryKey => $id));
			$this->request->data = $this->Authorlink->find('first', $options);
		}
		$recordtypes = $this->Authorlink->Recordtype->find('list');
		$authors = $this->Authorlink->Author->find('list');
		$this->set(compact('recordtypes', 'authors'));
	}

/**
 * delete method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		$this->Authorlink->id = $id;
		if (!$this->Authorlink->exists()) {
			throw new NotFoundException(__('Invalid authorlink'));
		}
		$this->request->onlyAllow('post', 'delete');
		if ($this->Authorlink->delete()) {
			$this->Session->setFlash(__('The authorlink has been deleted.'));
		} else {
			$this->Session->setFlash(__('The authorlink could not be deleted. Please, try again.'));
		}
		return $this->redirect(array('action' => 'index'));
	}
	
/**
 * метод approve позволяет принять запись соавтору
 * соответственно он ее активирует
 * 
 */	
	public function approve($id = null) {
		//debug ($this->data);
		$this->Authorlink->id = $id;

		$this->Authorlink->saveField('active', '1');
		//debug($this->Authorlink->id);
		//die();
		$this->Session->setFlash(__('Вы подтвердили соавторство.'));
		return $this->redirect(array('controller' => 'authorlinks', 'action' => 'index'));	
	}
	
	/**
	 * метод cancel позволяет принять запись соавтору
	 * соответственно он ее активирует
	 *
	 */
	public function cancel($id = null) {
		$this->Authorlink->id = $id;
		if (!$this->Authorlink->exists()) {
			throw new NotFoundException(__('Invalid authorlink'));
		}
		if ($this->Authorlink->delete()) {
			$this->Session->setFlash(__('Вы отклонили соавторство.'));
		} else {
			$this->Session->setFlash(__('The authorlink could not be deleted. Please, try again.'));
		}		
		return $this->redirect(array('controller' => 'authorlinks', 'action' => 'index'));
	}	

/**
 *  функции для обновления выпадающих списков при добавлнеии студента
 */
	public function update_course () {
		if(!empty($this->data['Authorlink']['profession_id'])) {
			$profession_id = $this->data['Authorlink']['profession_id'];
			$this->loadModel('Course');
			$options = $this->Course->find('list', array('conditions' => array('Course.profession_id' => $profession_id, 'Course.name <>' => 'Выпуск'), 'order' => array('Course.id asc')));
			$this->set(compact('options'));
			$this->render('update_course', 'blank');
		}
	}
	
	public function update_group() {
		if(!empty($this->data['Authorlink']['course_id'])) {
			$not_studentgroups = array('NOT' => array('Studentgroup.name' => array('Академ', 'Отчисленные')));
			$course_id = $this->data['Authorlink']['course_id'];
			$this->loadModel('Studentgroup');
			$options = $this->Studentgroup->find('list', array('conditions' => array('Studentgroup.course_id' => $course_id, $not_studentgroups), 'order' => array('Studentgroup.id asc')));
			$this->set(compact('options'));
			$this->render('update_group', 'blank');
		}
	}
	
	public function update_student() {
		if(!empty($this->data['Authorlink']['studentgroup_id'])) {
			$studentgroup_id = $this->data['Authorlink']['studentgroup_id'];
			$this->loadModel('Student');
			$students = $this->Student->find('all', array('conditions' => array('Student.studentgroup_id' => $studentgroup_id), 'recursive' => -1, 'order' => array('Student.lastname asc')));
			$options = array();
			foreach ($students as $student):
			$options[$student['Student']['id']] = $student['Student']['lastname'].' '.$student['Student']['firstname'].' '.$student['Student']['surname'];
			endforeach;
			$this->set(compact('options'));
			$this->render('update_student', 'blank');
		}
	}	
}
	
	
